package cn.com.blueInfo.bpm.number.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.number.enums.NumberSerialResetCycle;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

/**
 * 编号规则流水号表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:39:05
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "编号规则流水号 接收参数及校验")
public class NumberSerialDTO extends BaseDTO {

    /** 规则主表ID */
    @NotNull(message = "规则主表ID 不能为空")
    @Schema(description = "规则主表ID")
    private Long ruleId;
    /** 组织ID：NULL表示全局流水，非NULL表示按组织独立流水 */
    @NotNull(message = "组织ID 不能为空")
    @Schema(description = "组织ID：NULL表示全局流水，非NULL表示按组织独立流水")
    private Long orgId;
    /** 当前流水号 */
    @NotNull(message = "当前流水号 不能为空")
    @Schema(description = "当前流水号")
    private Long currentNum;
    /** 最小流水号 */
    @NotNull(message = "最小流水号 不能为空")
    @Schema(description = "最小流水号")
    private Long minNum;
    /** 最大流水号 */
    @NotNull(message = "最大流水号 不能为空")
    @Schema(description = "最大流水号")
    private Long maxNum;
    /** 流水号重置周期：NONE-不重置，YEAR-每年重置，MONTH-每月重置，DAY-每天重置 */
    @NotNull(message = "流水号重置周期 不能为空")
    @Schema(description = "流水号重置周期：NONE-不重置，YEAR-每年重置，MONTH-每月重置，DAY-每天重置")
    private NumberSerialResetCycle resetCycle;
    /** 最后一次重置时间 */
    @NotNull(message = "最后一次重置时间 不能为空")
    @Schema(description = "最后一次重置时间")
    private LocalDateTime lastResetTime;
    /** 流水号补位格式（如\"000000\"标识6位补0） */
    @NotBlank(message = "流水号补位格式 不能为空")
    @Schema(description = "流水号补位格式（如\"000000\"标识6位补0）")
    private String format;

    /**
     * 编号规则流水号 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "编号规则流水号 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 规则主表ID */
        @Schema(description = "规则主表ID")
        private Long ruleId;
        /** 组织ID：NULL表示全局流水，非NULL表示按组织独立流水 */
        @Schema(description = "组织ID：NULL表示全局流水，非NULL表示按组织独立流水")
        private Long orgId;
        /** 当前流水号 */
        @Schema(description = "当前流水号")
        private Long currentNum;
        /** 最小流水号 */
        @Schema(description = "最小流水号")
        private Long minNum;
        /** 最大流水号 */
        @Schema(description = "最大流水号")
        private Long maxNum;
        /** 流水号重置周期：NONE-不重置，YEAR-每年重置，MONTH-每月重置，DAY-每天重置 */
        @Schema(description = "流水号重置周期：NONE-不重置，YEAR-每年重置，MONTH-每月重置，DAY-每天重置")
        private NumberSerialResetCycle resetCycle;
        /** 最后一次重置时间 */
        @Schema(description = "最后一次重置时间")
        private LocalDateTime lastResetTime;
        /** 流水号补位格式（如\"000000\"标识6位补0） */
        @Schema(description = "流水号补位格式（如\"000000\"标识6位补0）")
        private String format;

    }

    /**
     * 编号规则流水号 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "编号规则流水号 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {}

}